home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
051-060
/
amok52
/
abitur
/
txt
/
saveload.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
3KB
|
123 lines
IMPLEMENTATION MODULE SaveLoad;
FROM Fragen IMPORT Frage, SchuelerAntwort;
FROM IntuFrage IMPORT IntuFrag;
FROM Str IMPORT Copy;
FROM SYSTEM IMPORT ADR;
FROM Arts IMPORT Assert;
FROM Exec IMPORT AllocMem, FreeMem, MemReqSet, MemReqs;
FROM Dos IMPORT Write, Read, Open, Close, oldFile, newFile,
FileHandlePtr;
FROM Globals IMPORT Spieler, SpielerPtr, AlleSpieler, AnzahlSpieler;
FROM StundenPlan IMPORT Plaene, StundenPlan, Zeit, ClosePlanFenster;
FROM AbiturScreen IMPORT AddAbiTxtLin, ShowAbiTxt, grueN, roT;
PROCEDURE GetKlassenName(VAR S: ARRAY OF CHAR);
VAR F: Frage;
A: SchuelerAntwort;
i: INTEGER;
BEGIN
F.Next := NIL;
FOR i := 0 TO 10 DO
F.Txt[i][0] := 0C;
END;
FOR i := 1 TO 6 DO
F.MultipleAntw[i][0] := 0C
END;
Copy(F.Txt[0], "Klassenname");
IntuFrag(ADR(F), A);
Copy(S, A.Str)
END GetKlassenName;
PROCEDURE SaveAktGame;
VAR KlName: ARRAY[0..255] OF CHAR;
FH: FileHandlePtr;
Akt: SpielerPtr;
i: INTEGER;
Anz: LONGINT;
BEGIN
IF (Zeit.Stunde = 8) AND (Zeit.Tag=0) THEN
AddAbiTxtLin("Kann doch nicht am");
AddAbiTxtLin("ersten Schultag schon");
AddAbiTxtLin("abhauen!");
ShowAbiTxt(roT);
RETURN
END;
GetKlassenName(KlName);
FH := Open(ADR(KlName), newFile);
IF FH # NIL THEN
FOR i := 1 TO 4 DO
Anz := Write(FH, ADR(Plaene[i]), SIZE(StundenPlan))
END;
Anz := Write(FH, ADR(Zeit), SIZE(Zeit));
Akt := AlleSpieler;
WHILE Akt # NIL DO
Anz := Write(FH, Akt, SIZE(Spieler));
Akt := Akt^.Next
END;
Close(FH)
ELSE
AddAbiTxtLin("Kann Klasse nicht");
AddAbiTxtLin("registrieren!");
ShowAbiTxt(grueN)
END
END SaveAktGame;
PROCEDURE FreeAllPlayers;
VAR Temp : SpielerPtr;
BEGIN
WHILE AlleSpieler # NIL DO
Temp := AlleSpieler;
AlleSpieler := AlleSpieler^.Next;
FreeMem(Temp, SIZE(Spieler))
END;
AnzahlSpieler := 0
END FreeAllPlayers;
PROCEDURE LoadAGame;
VAR AktSpieler : Spieler;
AP: SpielerPtr;
Anz : LONGINT;
KlName: ARRAY[0..255] OF CHAR;
FH: FileHandlePtr;
i:INTEGER;
BEGIN
FreeAllPlayers;
GetKlassenName(KlName);
FH := Open(ADR(KlName), oldFile);
IF FH # NIL THEN
FOR i := 1 TO 4 DO
ClosePlanFenster(i);
Anz := Read(FH, ADR(Plaene[i]), SIZE(StundenPlan));
Plaene[i].W := NIL
END;
Anz := Read(FH, ADR(Zeit), SIZE(Zeit));
REPEAT
Anz := Read(FH, ADR(AktSpieler), SIZE(Spieler));
IF Anz >= SIZE(Spieler) THEN
AP := AllocMem(SIZE(Spieler), MemReqSet{public});
Assert(AP#NIL, ADR("Not enough Meomires"));
INC(AnzahlSpieler);
AP^ := AktSpieler;
AP^.Next := AlleSpieler;
AlleSpieler := AP;
END
UNTIL Anz < SIZE(Spieler);
Close(FH)
ELSE
AddAbiTxtLin("Kann Klasse nicht");
AddAbiTxtLin("finden!");
ShowAbiTxt(grueN)
END
END LoadAGame;
END SaveLoad.